package practice2;

import utils.node.Node;
import utils.NodeUtils;

/**
 * @author Tara
 * @implNote 给定一个链表，删除所有节点值为x的节点，并返回头节点
 */
public class Pra2 {

    public static void main(String[] args) {
        Object[] arr = {3, 2, 4, 7, 9, 3, 3, 2, 3, 23, 21};
        // 构造一个链表
        Node node = NodeUtils.constructNode(arr);
        // 打印链表轨迹
        NodeUtils.printSingleNode(node);
        // 移除所有值为3的节点
        Node node1 = removeValues(node,2);
        //打印链表结构
        NodeUtils.printSingleNode(node1);
    }

    //移除单向链表的值为xx的节点
    private static Node removeValues(Node head, Object value) {
        // 1.考虑head第一位是否存在要移除的节点
        while (null != head) {
            // 先排除head位置存在要移除的节点
            if (head.value != value) {
                // 首位没有符合条件的就停止。
                break;
            }
            head = head.nextNode;
        }
        // 2.考虑 中间是否存在要移除的节点，存在就跳过去，不存在指针指向下一个
        // 游标指向当前节点
        Node cur = head;
        Node pre = null;
        while (null != cur) {
            if (cur.value == value) {
                pre.nextNode = cur.nextNode;
            } else {
                pre = cur;
            }
            cur = cur.nextNode;
        }
        return head;
    }
}
